package com.itany.corejava.code08_常用类.object;

/**
 * @author MissChen
 * @version 1.0
 * @date 2023 年11月09日 13:35
 */
public class TestClone {
    public static void main(String[] args) throws CloneNotSupportedException {
        testClone();
    }

    public static void testClone() throws CloneNotSupportedException{
       /* 如果希望能够克隆:
            1.克隆的类必须实现Cloneable接口，表示该类可以被克隆
            2.克隆的类必须重写clone方法*/
        Person2 person=new Person2("alice",20);
        Object obj=person.clone();
        System.out.println(obj);
        System.out.println(obj.getClass()==Person2.class);
        System.out.println(obj instanceof Person2);
        if(obj instanceof Person2){
            Person2 person2=(Person2)obj;
            person2.setName("马凡娟");
            person2.setAge(30);
            System.out.println(person2);
        }
        System.out.println(person);

        Address address=new Address("江苏省","南京市");
        Person2 person3=new Person2("alice",20,address);
        System.out.println(person3);

        // 浅克隆:只克隆对象本身，不克隆对象中所引用的对象
        // 即：只克隆第一层，所有的对其他对象的引用仍然是原来的对象
        Person2 person4= (Person2) person3.clone();
        System.out.println(person4);
        person4.getAddress().setProvince("河南省");
        person4.getAddress().setCity("郑州市");
        System.out.println(person3);
        System.out.println(person4);




    }
}
